/**
 * 创建符合BEM规范的class 方法
 * @param name 组件的根class的名字，如：swipe
 */
export function createNamespace(name: string) {
    const prefixedName = `op-${name}`;
    // 返回一个前缀class名，如：op-swipe,和一个递归创建符合BEM规范的class(起初传的是个block)
    return [prefixedName, createBEM(prefixedName)] as const
}

export function createBEM(name: string) {
    /**
     * el: 可选的element
     * mods: modifies 修饰符（用双中划线 -- 连接）,是一个对象，使用Record定义对象的键和值类型。
     * 如：.stick-man__head--small
     */
    return (el?: string, mods?: Record<string, boolean>) => {
        // 有el 用双下换线连接
        let result = `${name}${el ? `__${el}` : ''}`;

        if (mods) {
            // mods转字符串
            const modsStr = Object.keys(mods)
                .filter((mod) => mods[mod])
                .map((mod) => ` ${result}--${mod}`)
                .join('')
            result += modsStr
        }

        return result
    }
}